import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class AWTEvent extends JFrame implements ActionListener {
    JButton bt = new JButton("OK"); // 创建按钮btok并实例化
    JButton btcancel = new JButton("btcancel"); // 创建按钮btcancel并实例化
    JLabel lb = new JLabel("组件和事件处理："); // 创建标签
    JTextField tf = new JTextField(20); // 创建文本框，最多可输入30个字符
    JTextArea ta = new JTextArea(10, 20); // 创建文本区

    public AWTEvent() // 子类构造函数
    {
        super("组件综合实例"); // 调用父类中默认的构造方法并进行实例化，放在子类构造方法中的首行
        Container c = getContentPane(); // 获得窗口的内容显示层
        c.setLayout(new FlowLayout()); // 设置显示层的布局方式，指定布局方式为顺序布局

        c.add(lb); // 添加组件,通过容器c的add方法把组件加入到容器中
        c.add(ta);
        c.add(bt);
        c.add(tf);

        bt.addActionListener(this); // 对按钮btok加监听器听此按钮的动作
        tf.addActionListener(this); // 调用事件源对象addActionListener,注册事件源对象的事件监听者
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(400, 300);
        setVisible(true);
    }

    public void actionPerformed(ActionEvent e) // 对两个按钮发生的动作进行处理
    {
        if (e.getSource() == bt) {
            ta.append(tf.getText() + "\n");
            ta.append("现在因按下按钮引发的事件" + "\n");
        } else {
            ta.append(tf.getText() + "\n");
            ta.append("现在因在文本框里回车而引发的事件" + "\n");
        }
    }

    public static void main(String[] args) {
        new AWTEvent();
    }
}
